很多小伙伴,不知道设计模式是什么?
通常我们所说的设计模式是一种设计方案,是前人留下的经验及最佳实践。
想要学习设计模式,至少要把面向对象的基本结构全部了解。
设计模式,是建立在一定基础上的思维训练。
学习设计模式,要有面临痛苦的决心。
学会设计模式,对解决问题及对程序理解有更高层次的认识。
如果有这样的决心,那么下面我们就认识一下,它的真面目。
常说的设计模式是23种设计模式,分为3大类:
创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。
当然有一部分模式中,还有一些小的变化,在未来的持续更新中,我们会一一列举,并以代码为主,去学习设计模式。
从基础的角度看,设计模式是研究类本身或者类与类之间的协作模式,是进行抽象归纳的一个很好的速成思路。
从技术的角度已经有很多好的总结,本文会换一种角度思考,既然设计模式研究的是类与类的关系,我们作为工作的个体,一些工作中的策略是不是也可以进行类比,可以更好地去思考这些模式?答案是肯定的。
上次咱们说了“简单工厂模式”,今天咱们给大家说说创建型模式的“工厂方法模式”。
工厂模式的核心思想就是把创建对象和使用对象解藕,由工厂负责对象的创建,而用户只能通过接口来使用对象,这样就可以灵活应对变化的业务需求,方便代码管理、避免代码重复。
工厂方法模式指定义一个创建对象的接口,让实现这个接口的类来决定实例化哪个类,让类的实例化延迟到子类中进行。
对比于简单工厂模式,在简单工厂模式中,依赖于唯一的工厂对象,如果需要实例化一个产品时,就要向工厂中传入一个参数获取对象,如果要增加一种产品时,就要在工厂中修改创建产品的函数,耦合性过高。
在工厂方法中,依赖于工厂接口,可以通过实现工厂接口,创建多种工厂,将工厂对象负责具体类的实例化变成由一群子类来负责对具体类的实例化,从而将过程解耦。
既然是工厂,那就必须有产品,咱们的产品,任然用“女娲造人”传说中的人,作为产品。
产品:女娲造人,分男人和女人。
//产品类 人
abstract class Person{
private final String name;
private String sex;
public Person (String name){
this.name=name;
}
public String toString() {
return "我的名字是"+this.name+" i am "+sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
//男人
class Man extends Person{
{
setSex("Man");
}
public Man(String name){
super(name);
}
}
//女人
class Women extends Person{
{
setSex("Women");
}
public Women(String name){
super(name);
}
}
工厂方法模式,在于工厂的造人方法,造的都是人,需要设计抽象方法,但是具体实现类分了具体是造男人还是造女人。也就是,要达到使用同样的行为,执行同样的指令,造出不同的人。所以这种模式实际上是灵活应用了多态的设计,而完成的此效果。
//工厂方法
interface FactoryMethod{
Person getObject(String name);
}
class FactoryMan implements FactoryMethod {
@Override
public Man getObject(String name) {
return new Man(name);
}
}
class FactoryWomen implements FactoryMethod{
@Override
public Women getObject(String name) {
return new Women(name);
}
}
所以,调用的时候,工厂方法模式发挥着多态的作用:
new FactoryMan().getObject("迪卡");
new FactoryWomen().getObject("萨瓦");
工厂方法模式符合开闭原则和单一职责原则,工厂类支持拓展并且专注于某一类对象的创建工作;日常开发时,稍加留意一下,就会发现在很多工具类设计中都能看到工厂方法的身影。理解工厂方法的优缺点,对我们阅读源码还有开发业务都有很大的帮助。
以上就是今天的分享,如果你感兴趣记得点赞评论哦,以防找不到我。