java基础要求掌握三种重点设计模式:工厂,代理,单例。本文将针对工厂设计模式中的简单工厂模式,代理模式和单例模式这几块儿,我今天必须给大家讲的明明白白!
一.工厂设计模式.
1.简单工厂模式
简单工厂模式专门定义一个类用来创建其他类的实例,被创建的实例通常都具有共同的父类。
概要:1.一个抽象产品类
2.具体产品类
3.一个工厂
优点:简单易于实现,把类的实例化交给工厂,易于解耦。
缺点:添加具体产品需要修改工厂违反OCP开放封闭原则
以下是简单工厂模式:
package com.matajie;
import java.util.Scanner;
/**
* Author:年仅18岁的天才少年程序员
* *******Java猛男丶Mata杰
* *******我的程序才没有BUG!!!
*/
interface Computer{
void printComputer();
}
class MacComputer implements Computer{
@Override
public void printComputer() {
System.out.println("this is a MacComputer");
}
}
class SurComputer implements Computer{
@Override
public void printComputer() {
System.out.println("this is a SurComputer");
}
}
class Factory{
public static Computer getInstance(String type){
Computer computer = null;
if(type.equals("MacComputer")){
computer = new MacComputer();
}else if (type.equals("SurComputer")){
computer = new SurComputer();
}else {
System.out.println("无此商品");
}
return computer;
}
}
public class Client {
public void buyComputer(Computer computer){
computer.printComputer();
}
public static void main(String[] args) {
Client client = new Client();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你想要的电脑");
String type = scanner.nextLine();
Computer computer = Factory.getInstance(type);
client.buyComputer(computer);
}
}
这种模式的缺点太过明显了,每增加一个接口的子类就需要修改工厂类,在实际开发中根本用不到,那么我们应该怎么改进呢?
没错!用反射啊!因为Class类可以使用newInstance()实例化对象,而且Class.forName()能够接收类名称。
改进(反射):
package com.matajie;
import java.util.Scanner;
/**
* Author:年仅18岁的天才少年程序员
* *******Java猛男丶Mata杰
* *******我的程序才没有BUG!!!
*/
interface Computer{
void printComputer();
}
class MacComputer implements Computer{
@Override
public void printComputer() {
System.out.println("this is a MacComputer");
}
}
class SurComputer imp