设计模式之工厂模式

一. 简介

工厂方法是一种创建设计模式,用于在超类中创建对象,允许子类更改将创建的对象类型。

二.引入

想象你开发了一个生成女朋友的应用,一开始的时候你只想自己觉得好看,于是只考虑了萝莉的版本,没想到你的应用一下火了起来. 这时候有很多LSP不满意了,给你留言说你这应用咋没法生成御姐啊,让你赶紧加上,否则给你差评. 这时候由于你的代码已经与萝莉类耦合,你只能改变你的萝莉类,加上御姐的代码.试想随着越来越多的人使用你的应用,以后可能会有各种意料之外的要求,此时如果一直在萝莉类上改动会让认抓狂

三.解决方法

此时,工厂方法就可以派上用场.你可以使用特定的工厂方法替代原来的new 对象的方法.
猛一看这貌似啥用也没有,因为只是把创建对象从 new 变成了在别的类内部.
但是!!!
此时你只需要创建一个 公共接口,就可以让你的女朋友随你心意变

四.上代码

一个女朋友的接口

public interface Couple{
//通知生成方法
    void appear();
//一个哄开心方法
    void pamper();
//一个睡觉方法
    void sleep();
}

萝莉实现类

public class Luoli implements  Couple {
	@Override
	public void appear() {
		System.out.println("小萝莉出来啦");
	}

	@Override
	public void pamper() {
		System.out.println("小萝莉在你怀里撒娇");
	}

	@Override
	public void sleep() {
		System.out.println("小萝莉睡着了 zzzzz~");
	}
}

一个女朋友生成器

public abstract class CoupleFactory{

    public void apper() {
      

        Couple couple= createCouple();
        couple.appear();
    }  
    public abstract Couple createCouple();   
}

一个萝莉工厂

public LuoliFactory extends CoupleFactory{
 @Override
    public Button createCouple() {
        return new Luoli();
    }
}

如果你愿意,你甚至可以生成个坤坤当女朋友

public class KunKun implements couple{
//一个通知生成方法
 public void  appear(){
  System.out.println("坤坤打着篮球出来啦");
 }
   //一个哄开心方法
   public void pamper(){
   System.out.println("坤坤给你唱rap");
}
//一个睡觉方法
 public void sleep(){
   System.out.println("坤坤睡着了 zzzzz~");
} 

一个坤坤工厂

public KunKunFactory extends CoupleFactory{
 @Override
    public Button createCouple() {
        return new KunKun();
    }
}

运行试试看
public class Main {
	public static void main(String[] args) {
//		LuoliFactory luoliFactory = new LuoliFactory();
//		luoliFactory.appear();
//		Couple luoli = luoliFactory.createCouple();
//		luoli.pamper();
//		luoli.sleep();
		KunKunFactory kunKunFactory = new KunKunFactory();
		Couple kunkun = kunKunFactory.createCouple();
		kunkun.appear();
		kunkun.pamper();
		kunkun.sleep();
	}
}

结果

坤坤打着篮球出来啦
坤坤给你唱rap
坤坤睡着了 zzzzz~

五.优缺点总结

优点 :

  • 代码解耦
  • 符合单一职责原则,使代码更好支持和维护
  • 符合开闭原则. 你可以在不修改代码的情况下扩展它

缺点:

  • 本来我就想要一个对象的话,却因为使用工厂方法,写了一大堆对象,大大增加了代码的复杂度,因此它仅仅适用于你想生成同一类的多个不完全相同对象时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值