java设计模式---简单工厂模式/工厂模式/抽象工厂模式

                                     简单工厂模式

                                     简单工厂模式

一 简介

二 代码示例

三 改进

简单工厂优缺点​

                                             工厂模式

概述

代码示例

与简单工厂对比

                                         抽象工厂模式

 概述

代码示例


一 简介

二 代码示例

工厂

public class FruitFactory {
//	/*
//	 * 获得Apple类的实例
//	 */
//	public static  Fruit getApple() {
//		return new Apple();
//	}
//	
//	/*
//	 * 获得Banana类实例
//	 */
//	public static Fruit getBanana() {
//		return new Banana();
//	}
	/*
	 * get方法,获得所有产品对象
	 */
}

角色 

public class Apple implements Fruit{
	/*
	 * 采集
	 */
	public void get(){
		System.out.println("采集苹果");
	}
}


public class Banana implements Fruit{
	/*
	 * 采集
	 */
	public void get(){
		System.out.println("采集香蕉");
	}
}

抽象角色 

public interface Fruit {
	/*
	 * 采集
	 */
	public void get();
}

主函数

//		//实例化一个Apple
//		Fruit apple = FruitFactory.getApple();
//		Fruit banana = FruitFactory.getBanana();
//		apple.get();
//		banana.get();

三 改进

工厂

/*
	 * get方法,获得所有产品对象
	 */
	public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
//		if(type.equalsIgnoreCase("apple")) {
//			return Apple.class.newInstance();
//			
//		} else if(type.equalsIgnoreCase("banana")) {
//			return Banana.class.newInstance();
//		} else {
//			System.out.println("找不到相应的实例化类");
//			return null;
//		}
			Class fruit = Class.forName(type);
			return (Fruit) fruit.newInstance();
		
		
	}

主函数

Fruit apple = FruitFactory.getFruit("Apple");
Fruit banana = FruitFactory.getFruit("Banana");
apple.get();
banana.get();

其它不变

简单工厂优缺点

                                             工厂模式

概述

适合单类产品的排列组合

简单工厂的话  不符合封闭原则   (所以增加了一个角色工厂,这样再增加的时候不会修改工厂)

 

代码示例

工厂

public interface FruitFactory {
	public Fruit getFruit();
}

角色 

public class Apple implements Fruit{
	/*
	 * 采集
	 */
	public void get(){
		System.out.println("采集苹果");
	}
}

public class Pear implements Fruit {

	public void get() {
		System.out.println("采集梨子");
	}

}

角色工厂

public class AppleFactory implements FruitFactory {

	public Fruit getFruit() {
		return new Apple();
	}

}


public class PearFactory implements FruitFactory {

	public Fruit getFruit() {
		return new Pear();
	}
}

抽象角色

public interface Fruit {
	/*
	 * 采集
	 */
	public void get();
}

主函数

public static void main(String[] args) {
		//获得AppleFactory
		FruitFactory ff = new AppleFactory();
		//通过AppleFactory来获得Apple实例对象
		Fruit apple = ff.getFruit();
		apple.get();
		
		//获得BananaFactory
		FruitFactory ff2 = new BananaFactory();
		Fruit banana = ff2.getFruit();
		banana.get();
		
		//获得PearFactory
		FruitFactory ff3 = new PearFactory();
		Fruit pear = ff3.getFruit();
		pear.get();
	}

与简单工厂对比

                                         抽象工厂模式

 概述

相比工厂方法模式来说有归类的思想,不适合排列组合

抽象工厂模式 对产品又进行了抽象 就拿苹果来说,不只是苹果。还分温室的,南方的,北方的。

 

代码示例

抽象角色

public interface Fruit {
	/*
	 * 采集
	 */
	public void get();
}

工厂

public interface FruitFactory {
	//实例化Apple
	public Fruit getApple();
	//实例化Banana
	public Fruit getBanana();
}

角色 

public abstract class Apple implements Fruit{
	/*
	 * 采集
	 */
	public abstract void get();
}


public abstract class Banana implements Fruit{
	/*
	 * 采集
	 */
	public abstract void get();
}

角色种类

public class NorthApple extends Apple {

	public void get() {
		System.out.println("采集北方苹果");
	}

}

public class SouthApple extends Apple {

	public void get() {
		System.out.println("采集南方苹果");
	}

}

public class WenshiApple extends Apple {

	public void get() {
		System.out.println("采集温室苹果");
	}

}

根据各角色工厂

public class NorthFruitFactory implements FruitFactory {

	public Fruit getApple() {
		return new NorthApple();
	}

	public Fruit getBanana() {
		return new NorthBanana();
	}

}


public class SouthFruitFactory implements FruitFactory {

	public Fruit getApple() {
		return new SouthApple();
	}

	public Fruit getBanana() {
		return new SouthBanana();
	}

}

public class WenshiFruitFactory implements FruitFactory {

	public Fruit getApple() {
		return new WenshiApple();
	}

	public Fruit getBanana() {
		return new WenshiBanana();
	}

}

主函数

public static void main(String[] args) {
		FruitFactory ff = new NorthFruitFactory();
		Fruit apple = ff.getApple();
		apple.get();
		
		Fruit banana = ff.getBanana();
		banana.get();
		
		FruitFactory ff2= new SouthFruitFactory();
		Fruit apple2 = ff2.getApple();
		apple2.get();
		
		Fruit banana2 = ff2.getBanana();
		banana2.get();
		
		FruitFactory ff3 = new WenshiFruitFactory();
		Fruit apple3 = ff3.getApple();
		apple3.get();
		
		Fruit banana3 = ff3.getBanana();
		banana3.get();
	}

全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务