好了,富翁的公司已经规划好,现在来进行实现吧
代码来实现
Corp
package com.peng.ql;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public abstract class Corp {
// 生产
protected abstract void produce();
// 销售
protected abstract void shell();
// 赚钱--模板方法
public void makeMoney() {
this.produce();
this.shell();
}
}
HouseCorp
package com.peng.ql;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class HouseCorp extends Corp {
@Override
protected void produce() {
System.out.println("房地产在盖房子~~");
}
@Override
protected void shell() {
System.out.println("房地产在销售房子~~~");
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("房地产公司大赚一笔~~~~~");
}
}
ClothesCorp
package com.peng.ql;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class ClothesCorp extends Corp {
@Override
protected void produce() {
System.out.println("服装公司在生产衣服~~");
}
@Override
protected void shell() {
System.out.println("服装公司销售衣服~~~");
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("服装公司大赚一笔~~~~~");
}
}
Client
package com.peng.ql;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class Client {
public static void main(String[] args) {
System.out.println("富翁第一步:房地产");
HouseCorp hc = new HouseCorp();
hc.makeMoney();
System.out.println("富翁第二步:服饰");
ClothesCorp cc = new ClothesCorp();
cc.makeMoney();
}
}
执行结果
富翁第一步:房地产
房地产在盖房子~~
房地产在销售房子~~~
房地产公司大赚一笔~~~~~
富翁第二步:服饰
服装公司在生产衣服~~
服装公司销售衣服~~~
服装公司大赚一笔~~~~~
好了,设计思路已经有了,现在用勤劳的小手来实现一下吧!
代码
Corp
package com.peng.ql;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public abstract class Corp {
// 生产
protected abstract void produce();
// 销售
protected abstract void shell();
// 赚钱--模板方法
public void makeMoney() {
this.produce();
this.shell();
}
}
HouseCorp
package com.peng.ql;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class HouseCorp extends Corp {
@Override
protected void produce() {
System.out.println("房地产在盖房子~~");
}
@Override
protected void shell() {
System.out.println("房地产在销售房子~~~");
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("房地产公司大赚一笔~~~~~");
}
}
IpadCorp
package com.peng.ql;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class IPadCorp extends Corp {
@Override
protected void produce() {
System.out.println("生产Ipad~~");
}
@Override
protected void shell() {
System.out.println("销售Ipad~~~");
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("Ipad公司大赚一笔~~~~~");
}
}
Client
package com.peng.ql;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class Client {
public static void main(String[] args) {
System.out.println("富翁第一步:房地产");
HouseCorp hc = new HouseCorp();
hc.makeMoney();
System.out.println("富翁第二步:Ipad");
IPadCorp ic = new IPadCorp();
ic.makeMoney();
}
}
执行结果
富翁第一步:房地产
房地产在盖房子~~
房地产在销售房子~~~
房地产公司大赚一笔~~~~~
富翁第二步:Ipad
生产Ipad~~
销售Ipad~~~
Ipad公司大赚一笔~~~~~
现在富翁做到了,但是有个问题:就是之前的服装公司去哪了,难道要新建一个公司就要抛弃原来的公司,再重新建立新的公司?有钱也不能这么任性!那该怎么做呢?
废物利用,好主意,把公司的建筑留下,把产品改变一下就行了,然后生产新的产品,听起来还不错,不妨一试
看起来还不错,代码实现一下
Corp
package ql2;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public abstract class Corp {
// 产品对象
private Product product;
// 通过构造函数将产品传入
public Corp(Product product) {
super();
this.product = product;
}
// 赚钱--模板方法
public void makeMoney() {
// 生产产品
this.product.beProducted();
// 销售产品
this.product.beSelled();
}
}
HouseCorp
package ql2;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class HouseCorp extends Corp {
public HouseCorp(Product product) {
super(product);
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("房地产公司大赚一笔~~~~~");
}
}
ShanZhaiCorp
package ql2;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class ShanZhaiCorp extends Corp {
public ShanZhaiCorp(Product product) {
super(product);
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("山寨公司大赚一笔~~~~~");
}
}
Product
package ql2;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public abstract class Product {
// 生产产品
public abstract void beProducted();
// 销售产品
public abstract void beSelled();
}
House
package ql2;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class House extends Product {
@Override
public void beProducted() {
System.out.println("盖房中~~");
}
@Override
public void beSelled() {
System.out.println("销售房屋中~~~");
}
}
Ipad
package ql2;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class Ipad extends Product {
@Override
public void beProducted() {
System.out.println("生产ipad中~~");
}
@Override
public void beSelled() {
System.out.println("销售ipad中~~~");
}
}
Client
package ql2;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class Client {
public static void main(String[] args) {
// 致富之路之房地产
Corp cp = new HouseCorp(new House());
cp.makeMoney();
// 致富之路中之山寨产品
cp = new ShanZhaiCorp(new Ipad());
cp.makeMoney();
}
}
执行结果
盖房中~~
销售房屋中~~~
房地产公司大赚一笔~~~~~
生产ipad中~~
销售ipad中~~~
山寨公司大赚一笔~~~~~
Abstraction
package ql3;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class Abstraction {
// 定义实现化角色
private Implementor imlementor;
// 构造函数传入实现化角色
public Abstraction(Implementor imlementor) {
super();
this.imlementor = imlementor;
}
// 自身的属性和方法
public void request() {
this.imlementor.doSomething();
}
// 获得实现化角色
public Implementor getImlementor() {
return imlementor;
}
}
RefineAbstraction
package ql3;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class RefinedAbstraction extends Abstraction {
// 重写构造函数
public RefinedAbstraction(Implementor imlementor) {
super(imlementor);
}
// 修正父类的行为
@Override
public void request() {
super.request();
super.getImlementor().doAnything();
}
}
Implementor
package ql3;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public abstract class Implementor {
// 基本方法
public abstract void doSomething();
public abstract void doAnything();
}
ConcreteImplementor1
package ql3;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class ConcreteImplementor1 extends Implementor {
@Override
public void doSomething() {
// 业务逻辑处理
}
@Override
public void doAnything() {
// 业务逻辑处理
}
}
ConcreteImplementor2
package ql3;
/**
* @author kungfu~peng
* @data 2017年12月6日
* @description
*/
public class ConcreteImplementor2 extends Implementor {
@Override
public void doSomething() {
// 业务逻辑处理
}
@Override
public void doAnything() {
// 业务逻辑处理
}
}