烟台市建设工程交易中心网站,做轮播海报的网站,惠州网络问政平台官网,wordpress虚拟资源助推分类
设计模式一般分为三大类#xff1a;创建型模式、结构型模式、行为型模式。
创建型模式#xff1a;用于创建对象#xff0c;共五种#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式#xff1a;用于处理类或对…分类
设计模式一般分为三大类创建型模式、结构型模式、行为型模式。
创建型模式用于创建对象共五种包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式用于处理类或对象的组合共七种包括适配器模式、装饰者模式、代理模式、门面模式、桥梁模式、组合模式、享元模式。行为型模式用于描述类或对象怎样交互以及怎样分配职责共十一种包括策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
今天主角是简单工厂模式是工厂模式的一种属于创建型的设计模式。
定义
简单工厂模式是一种属于创建型模式的设计模式又叫做静态工厂方法Static Factory Method模式。简单工厂模式的核心是一个工厂类它负责实现创建所有产品实例的内部逻辑。这个工厂类提供了一个或多个静态的工厂方法根据参数的不同返回不同类的实例。这些被创建的实例通常都具有共同的父类。
简单工厂模式
Factory(工厂角色)
工厂角色即工厂类它是简单工厂模式的核心负责实现创建所有实例的内部逻辑工厂类可以直接被外界直接调用创建所需的产品对象在工厂类中提供了静态的工厂方法factoryMethod它返回一个抽象产品类Product所有的具体产品都是抽象产品的子类。
Product(抽象产品角色)
抽象产品角色是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口它的引入将提高系统的灵活性使得在工厂类中只需定义一个工厂方法因为所有创建的具体产品对象都是其子类对象。
ConcreateProduct(具体的产品类) 具体产品角色是简单工厂模式的创建目标所有创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色需要实现定义在抽象产品中的抽象方法 。 示例
这里也使用女娲造人的传说来演示一下简单工厂模式的使用过程这里女娲本身实际上就是一个造人的工厂可以造男人、造女人。
UML类图如下 伪代码演示如下
public interface Human {/*** 人类会吃东西*/void eat();/*** 人类会喝东西*/void drink();
}
public class Man implements Human{Overridepublic void eat() {System.out.println(男人一般比较喜欢吃肉);}Overridepublic void drink() {System.out.println(男人一般比较喜欢喝酒);}
}
public class Woman implements Human{Overridepublic void eat() {System.out.println(女人一般都比较喜欢吃甜食);}Overridepublic void drink() {System.out.println(女人一般都比较喝红酒);}
}
public class HumanFactory {public static Human create(Integer humanType){Human humannull;switch (humanType){case 0:humannew Woman();break;case 1:humannew Man();break;default:break;}return human;}public static void main(String[] args) {Human human HumanFactory.create(1);human.eat();human.drink();Human woman HumanFactory.create(0);woman.eat();woman.drink();}
} 到21世纪了现代社会的“女娲”如果除了会造正常的男人、女人外还会造机器人怎么办呢使用简单工厂方法就很简单
1、增加一个机器人类
2、再修改一下工厂类的造人方法
Uml类图 伪代码演示如下
public class Robot implements Human{Overridepublic void eat() {System.out.println(机器人不用吃东西);}Overridepublic void drink() {System.out.println(机器人不用喝东西);}
}
public class HumanFactory {public static Human create(Integer humanType){Human humannull;switch (humanType){case 0:humannew Woman();break;case 1:humannew Man();break;case 2:humannew Robot();default:break;}return human;}public static void main(String[] args) {Human human HumanFactory.create(1);human.eat();human.drink();Human woman HumanFactory.create(0);woman.eat();woman.drink();Human robot HumanFactory.create(2);robot.eat();robot.drink();}
} 应用场景
工厂模式是一种创建型模式它允许你创建对象而不必指定这些对象的类。这使得你可以在程序运行时动态地创建对象如果一个类有多个子类并且这些子类的创建过程比较复杂那么使用工厂模式可以使得代码更加简洁易于维护。
举一个例子假设有一个订单支付功能有两种支付方式支付宝支付和微信支付。用户在客户端进行支付时需要从这两种支付方式中选取一种进行支付操作。在这种情况下可以创建一个简单工厂模式来决定创建出哪一种支付方式的实例。
需要注意的是虽然简单工厂模式在一定程度上降低了代码的复杂度但在实际应用中如果需要根据不同的条件创建不同的对象或者需要在运行时动态地创建对象或者需要对对象的创建过程进行复杂的控制那么可能需要使用更复杂的工厂模式例如工厂方法模式或者抽象工厂模式等。
总结
优点
易于扩展由于简单工厂模式中工厂类的方法是静态的所以可以在不修改原有代码的基础上增加新的产品类只需要在新的产品类中实现工厂类所定义的接口即可。代码简洁简单工厂模式将对象的创建和使用分离使得代码更加清晰简洁易于维护。单一职责工厂类只负责创建对象没有其他的职责这使得代码更加单一职责明确。
缺点
违反了“开闭原则”在简单工厂模式中如果要增加新的产品类就需要修改工厂类这违反了“开闭原则”。难以扩展由于简单工厂模式中的工厂类是静态的所以不能通过继承来实现多态。这使得该模式难以扩展到大型的应用中。依赖性强由于简单工厂模式中的工厂类负责创建所有的产品对象因此对产品类的实现有很强的依赖性。如果产品类的实现发生了改变就需要修改工厂类。 建议
如果想要学会设计模式、用好设计模式建议先从UML类图开始学UML类图中不同的箭头和线条代表的意义是不同的这里简单的梳理了一下如果需要可以移步这里设计模式之基础UML类图怎么看_uml图怎么看-CSDN博客