先new 一个工厂:工厂里面包含一个抽象的产品,new 产品的时候,new 出具体的产品,产品包含包装和东西。
并初始化,调用时抽象的产品初始化,里面在调用作为protect 的子类的纯虚函数,调用子类的onIinitialize,初始化各种资源。
工厂设置参数。设一个资源管理器(独立的,单例)
初始化一辆车,但车不属于工厂,因此用单例,new 抽象车,构造车包含一个new 货车,
设置车的资源,需要通知就设置回调函数,并开始运行,等到装车。、
在抽象产品里面获取到每个产品的包装,并调用打上log.
抽象产品开始工作,
设计模式之美的读后感:
六:接口和抽象类:logger模块举例,不要让抽象类和子类用一个方法,父类log(可以直接声明纯虚函数)和子类的doLog的区别
判断能否打印,封装在父类的的log里面;
七:面向接口编程:函数命名不要暴露细节(抽象)(aliyun), 特殊流程不要暴露给使用者(getToken),依赖接口编程(为实现类定义统一的接口)。
八:多用组合,少用继承:科门刚属目的继承谱系导致代码臃肿,用组合,接口,委托的方式
public interface Flyable {
void fly();
}
public class FlyAbility implements Flyable {
@Override
public void fly() { //... }
}
//省略Tweetable/TweetAbility/EggLayable/EggLayAbility
public class Ostrich implements Tweetable, EggLayable {//鸵鸟
private TweetAbility tweetAbility = new TweetAbility(); //组合
private EggLayAbility eggLayAbility = new EggLayAbility(); //组合
//... 省略其他属性和方法...
@Override
public void tweet() {
tweetAbility.tweet(); // 委托
}
@Override
public void layEgg() {
eggLayAbility.layEgg(); // 委托
}
}