23种设计模式之工厂模式

一、分类

1、简单工厂

2、工厂方法

3、抽象工厂

二、使用案例

1、简单工厂

角色:抽象产品、具体产品、具体工厂、使用创造者

代码案例之女娲造人

抽象产品

public interface Human { 
//首先定义什么是人类
 
 //人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了;
public void laugh(); 
 
//人类还会哭,代表痛苦
public void cry(); 
 
//人类会说话
public void talk(); 
 
}

具体产品

public class BlackHuman implements Human { 
public void cry() { 
 System.out.println("黑人会哭"); 
 } 
public void laugh() { 
 System.out.println("黑人会笑"); 
 } 
public void talk() { 
 System.out.println("黑人可以说话,一般人听不懂"); 
 } 
}
public class WhiteHuman implements Human { 
public void cry() { 
 System.out.println("白色人类会哭"); 
 } 
public void laugh() { 
 System.out.println("白色人类会大笑,侵略的笑声"); 
 } 
public void talk() { 
 System.out.println("白色人类会说话,一般都是但是单字节!"); 
 } 
}

具体工厂

public class { 
 
 //定一个烤箱,泥巴塞进去,人就出来,这个太先进了
public static Human createHuman(String type){ 
if (type.equals("black")) {//生产黑人
            return new BlackHuman ();
        } else if (type.equals("white")) {//生产白人
            return new WhiteHuman();
        }

        return null;
 
 
}

使用创造者

public class NvWa { 
public static void main(String[] args) { 
 
 HumanFactory mFactory = new HumanFactory ();
 BlackHuman blackHuman = (BlackHuman ) mFactory.createHuman("black");//黑人
 WhiteHuman whiteHuman = (WhiteHuman ) mFactory.createHuman("white");//白人
 
}
}

2、工厂方法

角色:抽象产品类、具体产品类、抽象工厂类、具体工厂类

在简单工厂的基础上将工厂类抽象出来
工厂接口

public interface HumanFactory {
    Human createHuman();//生产人
}

具体工厂

白人工厂

public class WhiteFactory implements HumanFactory {
    @Override
    public Human createHuman() {
        return new WhiteHuman();
    }
}
黑人工厂

public class BlackFactory implements HumanFactory {
    @Override
    public Human createHuman() {
        return new BlackHuman();
    }
}

使用创造者

public class NvWa { 
public static void main(String[] args) { 
 
 WhiteFactory wFactory = new WhiteFactory  ();
 WhiteHuman whiteHuman= (WhiteHuman) wFactory.createHuman();//白人
 BlackFactory bFactory = new BlackFactory ();
 BlackHuman blackHuman= (BlackHuman) bFactory.createHuman();//黑人

 
}
}

3、抽象工厂

角色:抽象产品类、具体产品类、抽象工厂类、具体工厂类

工厂方法的基础上新增人类的性别

public interface Human { 
//首先定义什么是人类
 //人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了;
public void laugh(); 
 
//人类还会哭,代表痛苦
public void cry(); 
 
//人类会说话
public void talk(); 
 
//定义性别
public void sex(); 
}

具体产品
使用抽象类:因为要创建性别

public abstract class AbstractWhiteHuman implements Human { 
public void cry() { 
 System.out.println("白色人类会哭"); 
 } 
public void laugh() { 
 System.out.println("白色人类会大笑,侵略的笑声"); 
 } 

public void talk() { 
 System.out.println("白色人类会说话,一般都是但是单字节!"); 
 } 
}
public abstract class AbstractBlackHuman implements Human { 
public void cry() { 
 System.out.println("黑人会哭"); 
 } 
public void laugh() { 
 System.out.println("黑人会笑"); 
 } 
public void talk() { 
 System.out.println("黑人可以说话,一般人听不懂"); 
 } 
}

然后创建性别类

public class WhiteFemaleHuman extends AbstractWhiteHuman { 
public void sex() { 

 System.out.println("该白种人的性别为女...."); 
 } 
}
public class WhiteMaleHuman extends AbstractWhiteHuman { 
public void sex() { 
 System.out.println("该白种人的性别为男...."); 
 } 
}
public class BlackFemaleHuman extends AbstractBlackHuman { 
public void sex() { 
 System.out.println("该黑种人的性别为女..."); 
 } 
}
public class BlackMaleHuman extends AbstractBlackHuman { 
public void sex() { 
 System.out.println("该黑种人的性别为男..."); 
 } 
}

工厂类

public interface HumanFactory { 
 
//制造一个白色人类
public Human createWhiteHuman(); 
 
//制造一个黑色人类
public Human createBlackHuman(); 
}

抽象工厂

public abstract class AbstractHumanFactory implements HumanFactory { 
/*
 * 给定一个性别人类,创建一个人类出来 专业术语是产生产品等级
 */
protected Human createHuman(String type) { 
if (type.equals("blackMale")) {//生产男黑人
            return new BlackHuman ();
        } else if (type.equals("blackFemale")) {//生产女黑人
            return new BlackFemaleHuman ();
        }else if (type.equals("whiteMale")) {//生产男白人
            return new WhiteMaleHuman ();
        }else if (type.equals("whiteFemale")) {//生产女白人
            return new WhiteFemaleHuman ();
        }

        return null;
 
}

男性工厂

public class MaleHumanFactory extends AbstractHumanFactory { 
//创建一个男性黑种人
public Human createBlackHuman() { 
 return super.createHuman(“blackMale”); 
 } 
//创建一个男性白种人
public Human createWhiteHuman() { 
 return super.createHuman("whiteMale"); 
 } 
}

女性工厂

public class FemaleHumanFactory extends AbstractHumanFactory { 
//创建一个女性黑种人
public Human createBlackHuman() { 
 return super.createHuman(“blackFemale”); 
 } 
//创建一个女性白种人
public Human createWhiteHuman() { 
 return super.createHuman("whiteFemale"); 
 } 

}

创造使用者

public class NvWa { 
 
public static void main(String[] args) { 
 
 //第一条生产线,男性生产线
 HumanFactory maleHumanFactory = new MaleHumanFactory(); 
 
 //第二条生产线,女性生产线
 HumanFactory femaleHumanFactory = new FemaleHumanFactory(); 
 
 //生产线建立完毕,开始生产人了:
 Human maleBlackHuman = maleHumanFactory.createBlackHuman(); 
 
 Human femaleBlackHuman = femaleHumanFactory.createBlackHuman(); 
 
 maleBlackHuman .cry(); 
 maleBlackHuman .laugh(); 
 maleBlackHuman .sex(); 
 /*
 * .....
 * 后面你可以续了
 */
 } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_36655528

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值