看了就懂的工厂模式

简单工厂模式

简单工厂模式是属于创建型模式, 是工厂模式的一种。 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式
简单工厂模式: 定义了一个创建对象的类, 由这个类来封装实例化对象的行为(代码)
在软件开发中, 当我们会用到大量的创建某种、 某类或者某批对象时, 就会使用到工厂模式.

UML图:
在这里插入图片描述

  1. 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品
  2. 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
  3. 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

实现:

产品类(pizza):

abstract class Pizza {

	public Pizza() {}
}

class  CheesePizza extends Pizza {
	public CheesePizza() {
		System.out.println("make a CheesePizza");
	}
}

class  PepperPizza extends Pizza {
	public PepperPizza() {
		System.out.println("make a PepperPizza");
	}
}

工厂类:

public class factory {
	
	public Pizza CreatePizza(String name) {
		if(name.equalsIgnoreCase("cheese")) {
			return new CheesePizza();
		}else if(name.equalsIgnoreCase("pepper")){
			return new PepperPizza();
		}
		return null;
	}
}

顾客类:

public class customer {

	public static void main(String[] args) {
		factory f=new factory();
		Pizza p1=f.CreatePizza("cheese");
		Pizza p2=f.CreatePizza("pepper");
	}
}

在简单工厂中,每增加一种Pizza,都要在工厂类中增加相应的逻辑,工厂类十分被动,这样的工厂类成为全能类或者上帝类。

工厂方法模式

工厂方法模式设计方案: 将披萨项目的实例化功能抽象成抽象方法, 在不同的口味点餐子类中具体实现。
工厂方法模式: 定义了一个创建对象的抽象方法, 由子类决定要实例化的类。 工厂方法模式将对象的实例化推迟到子类

  1. 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
  2. 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
  3. 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
  4. 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的上帝类,分担了对象承受的压力。
实现:

产品类(pizza):

abstract class Pizza {

	public Pizza() {}
}

class  CheesePizza extends Pizza {
	public CheesePizza() {
		System.out.println("make a CheesePizza");
	}
}

class  PepperPizza extends Pizza {
	public PepperPizza() {
		System.out.println("make a PepperPizza");
	}
}

工厂类:

interface factory {
	public Pizza createPizza();
}

class CheesePizzaFactory implements factory{

	public CheesePizza createPizza() {
		return new CheesePizza();
	}
	
}

class PepperPizzaFactory implements factory{

	public PepperPizza createPizza() {
		return new PepperPizza();
	}
	
}

顾客类:

public class customer {

	public static void main(String[] args) {
		factory f1=new CheesePizzaFactory();
		Pizza p1=f1.createPizza();
		factory f2=new PepperPizzaFactory();
		Pizza p2=f2.createPizza();
	}
}

抽象工厂模式

抽象工厂模式参考

抽象工厂模式: 定义了一个 interface 用于创建相关或有依赖关系的对象簇, 而无需指明具体的类
抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合。
从设计层面看, 抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)。
将工厂抽象成两层, AbsFactory(抽象工厂) 和 具体实现的工厂子类。 程序员可以根据创建对象类型使用对应的工厂子类。 这样将单个的简单工厂类变成了工厂簇, 更利于代码的维护和扩展

UML图:
在这里插入图片描述
实现:
产品类(pizza):

abstract class Pizza {

	public Pizza() {}
}

class  BJCheesePizza extends Pizza {
	public BJCheesePizza() {
		System.out.println("make a BJCheesePizza");
	}
}
class  SHCheesePizza extends Pizza {
	public SHCheesePizza() {
		System.out.println("make a SHCheesePizza");
	}
}

class  BJPepperPizza extends Pizza {
	public BJPepperPizza() {
		System.out.println("make a BJPepperPizza");
	}
}

class  SHPepperPizza extends Pizza {
	public SHPepperPizza() {
		System.out.println("make a SHPepperPizza");
	}
}

工厂类:

interface Absfactory {
	public Pizza createPizza(String name);
}

class SHFactory implements Absfactory{

	public Pizza createPizza(String name) {
		
		if(name.equalsIgnoreCase("cheese")) {
			return new SHCheesePizza();
		}else if(name.equalsIgnoreCase("pepper")){
			return new SHPepperPizza();
		}
		return null;
	}
	
}

class BJFactory implements Absfactory{
	
	public Pizza createPizza(String name) {
		if(name.equalsIgnoreCase("cheese")) {
			return new BJCheesePizza();
		}else if(name.equalsIgnoreCase("pepper")){
			return new BJPepperPizza();
		}
		return null;
	}
	
}

顾客类:


public class customer {

	public static void main(String[] args) {
		Absfactory f1=new SHFactory();
		Pizza p1=f1.createPizza("cheese");
		Absfactory f2=new BJFactory();
		Pizza p2=f2.createPizza("pepper");
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 设计模式是软件工程中常用的一种解决问题的思想和方法的总结。它们是经验丰富的软件开发者通过长期实践总结出来的一套经典的、可复用的解决方案,可以帮助我们更好地编写高质量的代码和设计健壮的软件系统。 人人都设计模式 pdf下载是一个资源下载网站,针对设计模式相关的电子书籍,提供了PDF文件供大家下载学习。通过下载这份PDF文件,我们可以更加方便地学习和研究设计模式的内容。 设计模式的学习对于软件开发者来说非常重要。首先,设计模式可以帮助我们更好地理解软件系统设计的原则和思路。其次,设计模式让我们能够遵循一些已经被验证的最佳实践,避免重复造轮子,提高代码的可复用性和可维护性。同时,设计模式也可以加快开发速度,提高工作效率,减少开发过程中的错误和bug。 在学习设计模式时,我们可以通过实例和案例来深入理解每种模式的应用场景和解决方案。同时,我们也需要注意不要滥用设计模式,因为过度使用会使系统变得复杂,增加维护成本。所以,在实际开发中,我们要根据具体需求来选择合适的设计模式。 总之,设计模式是软件工程中不可或缺的一部分,掌握设计模式可以帮助我们写出更好的代码和更健壮的软件系统。人人都设计模式的PDF下载给了我们一个方便的学习资源,希望大家能够从中受益,并在实际开发中运用好设计模式。 ### 回答2: 设计模式是软件工程中非常重要的一种设计思想和解决方案,它能够帮助开发人员更好地组织和设计代码,提高代码的可重用性、可维护性和可扩展性。因此,人人都应该了解设计模式,并能够运用在实际的软件开发中。 设计模式的概念最早由四位软件工程师提出,他们在《设计模式:可复用面向对象软件的基础》一书中详细介绍了23种经典的设计模式。这些设计模式经过长期的实践验证,已被广泛应用于各种软件开发项目中。 对于开发人员来说,了解设计模式的好处不言而喻。首先,设计模式能够提供一种编程的规范和标准,使代码更易于理解和维护。其次,设计模式能够提供一种解决复杂问题的思路和方法,通过将问题分解为小的模块和组件,使得开发过程更加简化和高效。此外,设计模式还能够促进团队合作和交流,因为设计模式是一种通用的设计语言,使得团队成员之间能够更好地理解和分享代码。 因此,无论是初学者还是有经验的开发人员,都应该积极学习和理解设计模式。其中,最重要的一点是要深入理解每种设计模式的原理、适用场景和实现方式,同时还要通过实际的项目练习来加深对设计模式的理解和应用能力。 了解设计模式的方法有很多,可以通过阅读相关的书籍和文章、参加相关的培训和研讨会,以及参与开源项目等方式来提升自己的设计模式水平。另外,在互联网上也可以找到很多设计模式的相关资源,包括设计模式的教程、示例代码和pdf下载等。 总之,人人都应该了解设计模式,它对于提高软件开发水平和职业发展具有重要意义。因此,我们应该从现在开始积极学习和应用设计模式,提升自己的编程能力和软件设计水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值