设计模式之工厂模式
2017-05-15 11:29
127 查看
目的:对于实现同一接口的类,创建一个工厂类来实例化这些对象.
本文提到的四种工厂模式是不断优化改进的结果
1.简单工厂模式
interface Animal{
void eat();
}
class Dog implements Animal{
@Override
public void eat(){
System.out.println("Dog eat bone!");
}
}
class Cat implements Animal{
@Override
public void eat(){
System.out.println("Cat eat fish!");
}
}
class Factory{
public Animal getAnimal(String s){
if(s=="Dog"){
return new Dog();
}
else if(s=="Cat"){
return new Cat();
}
else{
System.out.println("Please input correct animal name!");
return null;
}
}
}
public class FactoryPattern {
public static void main(String[] args){
Factory factory=new Factory();
Animal dog=factory.getAnimal("Dog");
dog.eat();
}
}
问题:简单工厂模式在创建对象时需要输入对象的名字,如果错误则无法创建对象,需要改进;
2. 工厂方法模式
工厂方法模式在工厂类中增加了不同方法来创建相应的对象.
3. 静态工厂模式:将工厂方法模式中的方法改为静态方法即可.实际常使用静态工厂模式.
工厂方法模式和静态工厂模式都存在一个问题,即每次扩展时,均需要修改工厂类,增加方法来创建相应的对象,违反了开闭原则
4. 抽象工厂模式:
抽象工厂模式是增加一个工厂类的接口AnimalFactory,该接口存在一个方法来产生Animal对象;当程序扩展需要增加一个实现了Animal接口的类时(如Cow),同时需要增加一个实现AnimalFactory接口的工厂类,来产生相应的对象,符合”开闭原则”的要求.
interface Animal{
void eat();
}
class Dog implements Animal{
@Override
public void eat(){
System.out.println("Dog eat bone!");
}
}
class Cat implements Animal{
@Override
public void eat(){
System.out.println("Cat eat fish!");
}
}
interface AnimalFactory{
Animal getAnimal();
}
class DogFactory implements AnimalFactory{
public Animal getAnimal(){
return new Dog();
}
}
class CatFactory implements AnimalFactory{
public Animal getAnimal(){
return new Cat();
}
}
public class AbstractFactoryPattern {
public static void main(String[] args) {
// TODO Auto-generated method stub
DogFactory df=new DogFactory();
Animal dog=df.getAnimal();
dog.eat();
}
}
本文提到的四种工厂模式是不断优化改进的结果
1.简单工厂模式
interface Animal{
void eat();
}
class Dog implements Animal{
@Override
public void eat(){
System.out.println("Dog eat bone!");
}
}
class Cat implements Animal{
@Override
public void eat(){
System.out.println("Cat eat fish!");
}
}
class Factory{
public Animal getAnimal(String s){
if(s=="Dog"){
return new Dog();
}
else if(s=="Cat"){
return new Cat();
}
else{
System.out.println("Please input correct animal name!");
return null;
}
}
}
public class FactoryPattern {
public static void main(String[] args){
Factory factory=new Factory();
Animal dog=factory.getAnimal("Dog");
dog.eat();
}
}
问题:简单工厂模式在创建对象时需要输入对象的名字,如果错误则无法创建对象,需要改进;
2. 工厂方法模式
interface Animal{ void eat(); } class Dog implements Animal{ @Override public void eat(){ System.out.println("Dog eat bone!"); } } class Cat implements Animal{ @Override public void eat(){ System.out.println("Cat eat fish!"); } } class Factory{ public Animal getDog(){ return new Dog(); } public Animal getCat(){ return new Cat(); } } public class FactoryMethod { public static void main(String[] args) { // TODO Auto-generated method stub Factory factory=new Factory(); Animal dog=factory.getDog(); dog.eat(); } }
工厂方法模式在工厂类中增加了不同方法来创建相应的对象.
3. 静态工厂模式:将工厂方法模式中的方法改为静态方法即可.实际常使用静态工厂模式.
工厂方法模式和静态工厂模式都存在一个问题,即每次扩展时,均需要修改工厂类,增加方法来创建相应的对象,违反了开闭原则
4. 抽象工厂模式:
抽象工厂模式是增加一个工厂类的接口AnimalFactory,该接口存在一个方法来产生Animal对象;当程序扩展需要增加一个实现了Animal接口的类时(如Cow),同时需要增加一个实现AnimalFactory接口的工厂类,来产生相应的对象,符合”开闭原则”的要求.
interface Animal{
void eat();
}
class Dog implements Animal{
@Override
public void eat(){
System.out.println("Dog eat bone!");
}
}
class Cat implements Animal{
@Override
public void eat(){
System.out.println("Cat eat fish!");
}
}
interface AnimalFactory{
Animal getAnimal();
}
class DogFactory implements AnimalFactory{
public Animal getAnimal(){
return new Dog();
}
}
class CatFactory implements AnimalFactory{
public Animal getAnimal(){
return new Cat();
}
}
public class AbstractFactoryPattern {
public static void main(String[] args) {
// TODO Auto-generated method stub
DogFactory df=new DogFactory();
Animal dog=df.getAnimal();
dog.eat();
}
}
相关文章推荐
- 设计模式:工厂
- 简单工厂设计模式-设计模式(1)
- 设计模式之Factory工厂模式
- 设计模式之工厂方法
- 转:C#设计模式之简单工厂篇
- .NET中的设计模式一:工厂模式
- C#设计模式之简单工厂篇
- C#设计模式之简单工厂篇
- .NET实用设计模式:工厂模式(Factory)
- 抽象工厂设计模式(C#)
- .NET中的设计模式一:工厂模式 (转)
- 设计模式[2]-旧话重提之工厂模式
- 设计模式之(2)简单工厂模式
- 设计模式之 工厂方法(Factory)------对象创建型模式
- .NET中的设计模式一:工厂模式 选择自 lane_cn 的 Blog
- C#设计模式学习笔记---简单工厂模式
- Java设计模式:Factory(工厂模式)
- .NET中的设计模式一:工厂模式
- 设计模式[2]-旧话重提之工厂模式
- Java设计模式之工厂模式篇