设计模式

1.工厂设计模式

interface IFruit{
public void eat();
}
class Apple implements IFruit{
public void eat(){
System.out.println("洗着吃苹果");
}
}
class Orange implements IFruit{
public void eat(){
System.out.println("剥皮吃橘子");
}
}




//工厂模式
class Factory{
public static IFruit getClassName(String ClassName){
if("Apple".equals(ClassName)){
return new Apple();
}
if("Orange".equals(ClassName)){
return new Orange();
}
return null;
}
}
public class InterfaceDemo{
public static void main(String args[]){
//子类对象实例化父类接口,new是开发过程中最大的耦合,如果想进行解耦,就必须使用一个第三方Factory类来设计
//IFruit fruit=new Apple();
//fruit.eat();
if(args.length!=1){
System.out.println("没有正确输入格式,正确格式为:java InterfaceDemo 水果名字");
System.out.println(args.length);
System.exit(1);
}else{
System.out.println(args.length);
IFruit fruit=Factory.getClassName(args[0]);
fruit.eat();
}
}
}

改进版,接受多个类对象,不需要变更工厂类

package com.wjx.sayHello;
interface IFruit{
	public void eat();
}
class Apple implements IFruit{
	@Override
	public void eat() {
		System.out.println("吃苹果");
	}
}
class Orange implements IFruit{
	@Override
	public void eat() {
		System.out.println("吃橘子");
	}
}

interface IMessage{
	public void print();
	
}
class IMessageImpl implements IMessage{

	@Override
	public void print() {
		System.out.println("打印信息");
		
	}
	
}
class Factory{
	private Factory(){};
	//通过泛型接受多个接口
	public static <T> T getInstance(String className) {
		T obj=null;
		try {
			//通过反射获取类名称来动态实例化对象
			obj=(T)Class.forName(className).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return obj;
	}
}
public class FactoryDesignPatternTestDemo {

	public static void main(String[] args) {
		IFruit fruit=Factory.getInstance("com.wjx.sayHello.Orange");
		fruit.eat();
		IMessage msg=Factory.getInstance("com.wjx.sayHello.IMessageImpl");
		msg.print();

	}

}



2.代理设计模式

所谓代理模式,即两个子类共同实现一个接口,其中一个子类负责真实业务逻辑的实现,另外一个子类辅助真实业务主体的实现;

// 代理设计模式
//业务场景,核心目的是救人(接口),核心业务实现救人,辅助业务类实现破门操作,表扬操作
//核心目的接口
interface CorePurpose{
public void save();
}
//核心业务
class CoreService implements CorePurpose{
public void save(){
System.out.println("王先生最终救人成功");
}
}
//辅助业务类
class ProxyService implements CorePurpose{
private CorePurpose corepurpose;
public ProxyService(CorePurpose corepurpose){
this.corepurpose=corepurpose;
}
public void unLock(){
System.out.println(" 王先生联系解锁公司救人成功");
}
public void praise(){
System.out.println(" 王先生受到媒体报道表扬");
}
public void save(){
this.unLock();
this.corepurpose.save();
this.praise();
} 
}
//工厂代理
class Factory{
public static CorePurpose getInstance(){
return new ProxyService(new CoreService());
}
}
public class InterfaceDemo{
public static void main(String args[]){
CorePurpose c=Factory.getInstance();
c.save();
}
}


3.单例设计模式
所谓单例设计模式指 的是一个类只允许产生一个实例化对象


//单例设计
//特点:构造方法私有化,外部无法产生实例化对象,只能通过static去调用访问
//饿汉式
class Singleton{
private final static Singleton instance=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
public void print(){
System.out.println("Hello World!");
}
}
class TestSingleton {
public static void main(String[] args) {
Singleton s=null;
//s=new Singleton();
s=Singleton.getInstance();
s.print();
}
}

4.多例设计模式
所谓多例只是比单例追加了更多内部实例化对象的产生

class Sex{
private String title;
private static final Sex MALE=new Sex("男");
private static final Sex FEMALE=new Sex("女");// 实例化
public  static final int MALE_FLAG=1;
public  static final int FEMALE_FLAG=2;
private Sex(String title){
this.title=title;
}
public String toString(){
return this.title;
}
public static Sex getInstance(int ch){
switch(ch){
case MALE_FLAG:
return MALE;
case FEMALE_FLAG:
return FEMALE;
default:
return null;
}
}
}
class TestSingleton {
public static void main(String[] args) {
Sex a=Sex.getInstance(Sex.MALE_FLAG);
System.out.println(a);

}
}



                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值