创建型模式
创建型模式关注对象的创建过程,其主要的特点是将对象的创建和使用分离,这样在使用对象时无需关心对象的创建细节,从而降低系统的耦合度。
创建型模式对类的实例化过程即对象的创建过程进行抽象,能够使软件模块做到与对象的创建和组织无关。创建型模式隐藏了对象的创建细节,通过隐藏对象如何被创建和组合在一起达到整个系统独立的目的。在掌握创建型模式时,需要回答以下三个问题,创建什么(What)、由谁创建(who)和何时创建(when)
简单工厂模式
**定义:**定义一共类,根据参数的不同返回不同类的实例,这些类具有公共的父类和一些公共的方法
角色:
1.工厂类2.抽象产品类 3.具体产品类
类图: 其中Factory为工厂类,负责根据逻辑返回一个具体的产品。所以它依赖于具体产品类(ConcretrProduct),具体产品类则实现抽象产品类Product
实战题目:
模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man对象,如果传入参数“W”,则返回一个Woman对象,用Java语言实现该场景。现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意“女娲”的变化。
类图及其角色作用
Person作为抽象产品类,Woman、Man、Roboat实现接口Person,Factory作为核心工厂类
代码
public interface Person {
void Create();
}
public class Man implements Person{
public void Create(){
System.out.println("制造男人");
}
}
public class Roaboat implements Person{
public void Create(){
System.out.println("制造机器人");
}
}
public class Woman implements Person{
public void Create(){
System.out.println("制造女人");
}
}
public class NvwaFactory {
public static Person creatPerson(String kind){
if(kind.equalsIgnoreCase("m"))
{
return new Man();
}
else if (kind.equalsIgnoreCase("w"))return new Woman();
else return new Roaboat();
}
}
客户端
public class Clicent {
public static void main(String args[]){
Person person;
person=NvwaFactory.creatPerson("r");
person.Create();
}
}
简单工厂优劣分析
优点:简单工厂模式实现了责任的划分。免除直接创建产品对象的责任。
缺点:但是一旦工厂类无法工作,整个系统都要受到影响,同时系统扩展较为困难,一旦添加新产品就不得不修改工厂逻辑,违反了开闭原则,并造成工厂逻辑过于复杂。
总结
简单工厂主要是通过工厂类里面写if、else来返回一个抽象产品