代码先锋网 代码片段及技术文章聚合

java常见的几种设计模式

一、工厂模式

工厂模式就是将程序中创建对象的操作单独出来处理,这种模式的灵活性很高,如果以后还有子类的扩充,只需要修改工厂类即可。

例如:

abstract class Fruit{
	public abstract void eat();
}

class Apple extends Fruit{
	@Override
	public void eat() {
		System.out.println("我吃的是苹果");
	}
}

class Orange extends Fruit{
	@Override
	public void eat() {
		System.out.println("我吃的是橘子");
	}
}

public class FruitFactory {

	public static Fruit getInstance(String className){
		if("apple".equals(className))
			return new Apple();
		else if("orange".equals(className))
			return new Orange();
		else
			return null;
	}
	
	public static void main(String[] args) {
		Fruit f=FruitFactory.getInstance("apple");
		f.eat();
	}
}

 首先创建了一个水果的抽象类,定义了一个抽象方法eat(),之后定义了苹果和橘子两个水果的子类,具体实现eat方法。FruitFactory就是一个水果工厂类,根据参数的不同,返回不同的水果子类。

 

二、代理模式

代理设计就是指由一个代理主题来操作真实的主题,真实主题执行具体的业务操作,而代理主题负责其他业务的处理,类似于我们生活中通过代理来上网。

interface Network{
	public void getNet();
}

class Real implements Network{
	@Override
	public void getNet() {
		System.out.println("获得网络,成功上网。");
	}
	
}

class Proxy implements Network{
	public Network network;
	
	public Proxy(Network network){
		this.network=network;
	}
	private void check(){
		System.out.println("用户名密码正确");
	}
	@Override
	public void getNet() {
		this.check();
		network.getNet();
	}
	
}

public class NetworkProxy {
	public static void main(String[] args) {
		Network network=new Proxy(new Real());
		network.getNet();
	}

}

 首先定义一个上网接口,只有一个获取网络的方法。之后定义一个真实上网的类和代理上网的类都实现这个接口,而在代理类中需要设置被代理的真实操作并增加自己的业务。

 

三、适配器模式

在java中,一个类要实现一个接口必须覆写接口的所有抽象方法,如果一个接口定义的抽象方法过多,子类根本不需要这么多方法,这个时候我们可以定义一个中间的过渡,这个过渡类并不能直接被使用,则将其定义为抽象类,也就是适配器类。

interface Window{
	public void open();
	public void close();
	public void browse();
	public void play();
}

abstract class WindowAdapter implements Window{
	public void open(){};
	public void close(){};
	public void browse(){};
	public void play(){};
}

class Window1 extends WindowAdapter{
	public void open(){
		System.out.println("系统开启");
	}
	public void close(){
		System.out.println("系统关闭");
	}
}

class Window2 extends WindowAdapter{
	public void browse(){
		System.out.println("上网浏览信息");
	}
	public void play(){
		System.out.println("上网玩游戏");
	}
}
public class AdapterTest {
	public static void main(String[] args) {
		WindowAdapter adapter1=new Window1();
		WindowAdapter adapter2=new Window2();
		adapter1.open();
		adapter2.browse();
		adapter2.play();
		adapter1.close();
	}
}

 定义一个window接口,包含四个抽象方法,之后定义一个适配器类,覆写所有方法,方法体为空,适配器的子类则有选择的实现需要的方法。

 

四、单例模式

单例模式就是确保一个类只能有一个实例,这在spring框架中被广泛使用。

class A{
	private final static A a=new A();

	private A(){//避免使用new实例化对象
		
	}
	
	public static A getInstance(){
		return a;
	}
}

public class SingletonTest {
	public static void main(String[] args) {
		A a=A.getInstance();
		A aa=A.getInstance();
		System.out.println(a==aa);
	}
}

 通过以上例子可以发现,a对象和aa对象是完全相同的,即同一个实例。

精彩科技工作室
版权声明:本文为yao891203原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yao891203/article/details/84405740

智能推荐

常见的几种设计模式

01 设计模式六大原则 开闭原则 对扩展开放,对修改关闭。程序在修改时,不能修改原有的代码,而是要扩展原有的代码,实现热插拔的效果。 单一职责原则 一个类应该有且仅有一个引起它变化的原因,否则这个类应该被拆分。 里氏替换原则(Liskov Substitution Principle) 子类可以扩展父类的功能,但不能改变父类原有的功能。即子类继承父类时,除添加新的方法完成新增功能外,金陵不要重写父...

前端常见的几种设计模式

前端常见的几种设计模式 一、单例模式 核心思想:确保一个类只对应一个实例 特点: 只允许一个例存在,全局可访问,第一次创建后缓存下来 排除全局变量,防止全局变量被重写 全局可访问 应用:vue的安装插件,弹窗的实现(无论点击多少次,弹窗只被创建一次) 实现: 1、直接生成全局对象 const声明的变量不可重新赋值,但对象中的属性可变,可以使用freeze使其不可被修改或新增属性 缺点:生成一个固定...

JS常见的几种设计模式

JS设计模式 JS设计模式:是一种思想,更规范更合理地去管理代码【方便维护、升级、扩展、开发】 单例模式 && 命令模式 1、 最早期的模块化编程思想【同样的还有:AMD、CMD、CommonJS、ES6Module】 2、 避免全局变量的污染 3、 实现模块化之间的相互调用【提供了模块导出的方案】 4、在实际开发中,还可以基于命令模式管控方法的执行顺序,从而有效的实现出对应的功能...

几种常见的设计模式

简单工厂模式 工厂模式其实就是将创建对象的过程封装起来。就像工厂一样,我们不需要关心工厂怎么制造东西,我们只需要提供材料,就能得到我们想要的东西。 先写一个简单构造函数。 很好,我们可以通过Clothes制造出很多件的衣服,但是现在的衣服只有颜色,尺寸,性别三种,并不能区分是上衣还是裤子,没有种类这个属性。如果需要加上的话: 很明显,如果衣服种类多的话,需要创建很多个构造函数。所以,我们可以做一个...

js几种常见的设计模式

一、工厂模式 工厂模式 二、单例模式 三、代理模式 四、适配器模式 五、策略模式...

猜你喜欢

Java设计模式学习之另外几种常见模式

装饰器模式 通过一个装饰类动态的将新功能附加到对象上,同时不改变其结构。 优点:在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp) 特点:装饰类持有原有类或接口的对象,并调用它的方法 通过一个装饰类对现有类对象动态添加一些功能,同时不改变其结构 动态添加,动态撤销 继承的替代方式,继承只能静态添加 多成装饰产生过多相似对象,复杂且不易排错 装饰者模式在 JDK 应用的源码分...

JS的常见的几种设计模式

一、工厂模式 var lev=function(){ return “嘿哈”; }; function Parent(){ var Child = new object(); Child.name = “李小龙”; Child.age = “30”; Child.lev = lev; return Child; 1、在函数中定...

常见的几种单例模式的设计

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 单例模式 涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提...

JavaScript的几种常见的设计模式

JavaScript的几种常见的设计模式: 首先了解一下什么是设计模式: 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每...

聊聊 js 几种常见的设计模式。

掌握 JavaScript 中常见的一些设计模式,对我们书写规范性代码,可维护性代码有很大的帮助。   单例模式 所谓单例模式即为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 这里其实利用的是 js闭包 来实现这样的功能。 假如现在我们有这样的需求,设置一个管理员,无论创建多次都只是设置一次。 这种方法有一个缺点就是:如果我们需要再次创建一个 HR,则需要...