嗯,最近复习一下常用的设计模式,顺便巩固一下java技术基础。文章里都是个人的一些见解,官方的解释就不放了,网上一大堆。
一、什么是工厂模式
工厂模式,最简单的一种设计模块,也很好的体现了面向对象编程的思想。
个人理解:其实就是将同一类型的事物抽象出来,当成一个工厂来处理,只要是这种类型的事物,都可以从这个工厂里获取。
解决问题:不用在代码里到处实例化对象,更好的去统一分类管理同一类型的类。
二、demo演示
比如现在需要用到一系列的动物,但是当前只需要用到Dog、Cat这2个,以后还会有各种动物的接入使用,为了解决在使用某个动物时,不用到处去new实例,并且实现统一的管理,我们就可以使用工厂模式来设计。
1.将事物进行分类,抽象出事物的统一分类标准,这里就是动物(Animal),而且Animal是暂时不能定义其具体行为和属性的,所以用接口进行定义。假设都可以动物有名字、颜色、年龄
public interface Animal {
public void getName();
public void getColor();
public void getAge();
}
2.当前需要用的是Dog和Cat,定义Dog、Cat并实现该接口
Dog:
public class Dog implements Animal{
@Override
public void getName() {
System.out.println("my name is Dog");
}
@Override
public void getColor() {
}
@Override
public void getAge() {
}
}
Cat:
public class Cat implements Animal {
@Override
public void getName() {
System.out.println("my name is Cat");
}
@Override
public void getColor() {
}
@Override
public void getAge() {
}
}
3.建立一个动物工厂,专门提供各种动物的对象【2种实例化对象的方式】。
*实例化对象的4种方式:
①通过构造函数new对象,
②通过Class.forName以及newInstance反射实例对象
③通过调用对象的clone(),克隆对象
④通过IO流,将对象输出到到本地,再从本地读取对象的数据结构
public class AnimalFactory {
private static String classCatName="com.cheng.designpattern.factory_model.Cat";
private static String classDogName="com.cheng.designpattern.factory_model.Dog";
//普通new实例化
public static Animal getAnimalUseNew(String animalType){
if(animalType.equalsIgnoreCase("Cat")){
return new Cat();
}
else if (animalType.equalsIgnoreCase("Dog")){
return new Dog();
}else{
return null;
}
}
//反射实例化
public static Animal getAnimalUseDynamic(String animalType) {
if(animalType.equalsIgnoreCase("Cat")){
try{
Class c=Class.forName(classCatName);
Cat people=(Cat) c.newInstance();
return people;
}catch (Exception e){
return null;
}
}
else if (animalType.equalsIgnoreCase("Dog")){
try{
Class c=Class.forName(classDogName);
Dog dag=(Dog) c.newInstance();
return dag;
}catch (Exception e){
return null;
}
}else{
return null;
}
}
}
4.写个测试类
public class Test {
public static void main(String[] args) {
Animal people=AnimalFactory.getAnimalUseNew("Cat");
people.getName();
Animal dog=AnimalFactory.getAnimalUseNew("Dog");
dog.getName();
Animal people1=AnimalFactory.getAnimalUseDynamic("Cat");
people1.getName();
Animal dog1=AnimalFactory.getAnimalUseDynamic("Dog");
dog1.getName();
}
}
后台打印结果:
到此,最简单的工厂模式demo就演示完了,如有错漏请告知。