工厂模式的应用场景和实现代码
适用场景:用来向使用者屏蔽创建对象的细节
如果不用工厂模式,就要亲自关注如何创建对象,造成创建对象的代码和使用对象的代码耦合度很高,不易后续修改和测试。
实现代码:
一个业务父类,N个业务子类
一个工厂接口
N个工厂接口实现类-具体的工厂
通过具体的工厂创建业务子类实例
class Book {
public Book(){ }
}
public class JavaBook extends Book {
public JavaBook(){}
}
public class DBBook extends Book {
public DBBook(){}
}
interface BookFactory{
Book createBook();
}
public class JavaBookFactory implements BookFactory{
public JavaBook createBook(){
return new JavaBook();
}
}
public class DBBookFactory implements BookFactory{
public DBBook createBook(){
return new DBBook();
}
}
//使用对象的地方
BookFactory javaFactory = new JavaBookFactory ();
Book javaBook = javaFactory.createBook();
BookFactory dbFactory = new DBBookFactory ();
Book dbBook = dbFactory.createBook();
在使用工厂模式设计代码结构时,应遵循开闭原则。
开闭原则( OCP ) 与设计模式无关,它是一种设计架构的原则,核心思想是,系统(或模块或万法) 应当对扩展开放,对修改关闭(也就是不会影响到原有的实现)。
抽象工厂模式的应用场景和实现代码
和工厂模式的区别:
与工厂模式相比 ,抽象工厂模式的顶层类一般是抽象类(也就是抽象工厂模式名称的来源),但与工厂模式相比 ,没有优劣之分 , 只看哪种模式更能适应需求 。 例如,如果要在同一类产品(如书 ) 中生严多个子产品 (如文稿和视频) ,那么就可以使用抽象工厂模式;而如果需要生产的产且中只有主部件 (如文稿),而不需要附属产品(如视频),那么就可以用工厂模式 。