java 设计模式 学习笔记(1) - 简单工厂模式

本文介绍了简单工厂模式的概念及其在Java中的应用。通过一个简单的例子展示了如何利用简单工厂模式创建不同类型的对象,并解释了该模式如何提高系统的可扩展性和降低代码修改成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单工厂模式是java 设计模式里头比较简单基础的一种,其特点是根据用户不同的参数而返回不同的实例。

使用简单工厂的好处在于在今后可能的系统扩展或修改时带来更大的可扩展行和更少的代码修改。

根据《重构》 中的介绍,尽量减少 生成新的对象的代码。


在这里,我自己写了一个简单工厂的小例子:

/** * 这是一个动物类,有一个所有动物都有的方法 shout * @author liaogang.pt */ public class Animal { public void shout(){ System.out.println("you create a :"+this.getClass().getName()); } }

/** * 这是一个熊类,简单起见,它继承了 Animal 类,同时也就继承了shout 方法 * @author liaogang.pt * */ public class Bear extends Animal{ }

/** * 这是一个猫类,简单起见,它继承了 Animal 类,同时也就继承了shout 方法 * @author liaogang.pt */ public class Cat extends Animal{ } /** * 这是一个狗类,简单起见,它继承了 Animal 类,同时也就继承了shout 方法 * @author liaogang.pt * */ public class Dog extends Animal{ } /** * 这是动物工厂类,它的作用就是根据用户输入的字符来生产一个对应的 猫/狗/熊 类 * @author liaogang.pt * */ public class AnimalFactory { public static Animal createAnimal(char type){ Animal animal = null; switch(type){ case 'd' : animal=new Dog(); break; case 'c' : animal=new Cat(); break; case 'b' : animal=new Bear(); break; } return animal; } }

/** * 这是一个带main 方法的演示类,用来显示使用 AnimalFactory 类产生不同的动物实例 * @author liaogang.pt * */ public class TestAnimalFactory { public static void main(String[] args){ Animal animal1= AnimalFactory.createAnimal('b'); Animal animal2= AnimalFactory.createAnimal('c'); Animal animal3= AnimalFactory.createAnimal('d'); animal1.shout(); animal2.shout(); animal3.shout(); } }

最后输出结果:you create a :Bear you create a :Cat you create a :Dog



在这个例子中,先声明了一个animal 父类,animal 类中还有一个 shout 方法,其中:

System.out.println("you create a :"+this.getClass().getName());

的作用就是打印出调用 shout 方法的animal 类或其子类的类名

通过这样的方式,我们在使用 工厂方法生产的 animal 子类就可以明确到底是产生了那个子类了。


看看 AnimalFactory 工厂方法,我还顺带着用了一下多态,啥叫多态 : 声明了父类,产生的却是某个子类。

用 Animal animal =null 来声明一个 父类,

animal = new Dog () 产生一个 DOG 子类






PS:为了保证代码的健壮性,也为了向程序阅读者强调 AnimalFactory 仅仅只是一个工厂类,是用来产生 Animal 的子类对象的,

可以 将 AnimalFactory 的默认构造函数设置为private ,这样即使他人想实例化 AnimalFactory 这个工厂类,也无能为力。

修改后的工厂类方法:

/** * 这是动物工厂类,它的作用就是根据用户输入的字符来生产一个对应的 猫/狗/熊 类 * 使用私有默认构造函数,进一步表明这个类是一个工厂类,不能作为他用 * @author liaogang.pt * */ public class AnimalFactory { private AnimalFactory(){ }; public static Animal createAnimal(char type){ Animal animal = null; switch(type){ case 'd' : animal=new Dog(); break; case 'c' : animal=new Cat(); break; case 'b' : animal=new Bear(); break; } return animal; } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值