java什么是组件 java组件化设计模式
转载
1.使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
2.设计模式使代码编制真正工程化,设计模式是软件工程的基石。
3.总共有23种设计模式。这些模式可以分为三大类:
3-1:创建型模式(Creational Patterns)
3-2:结构型模式(Structural Patterns)
3-3:行为型模式(Behavioral Patterns)
1、设计模式六大原则
1.单一职责类原则:就是一个类只负责一个业务职责。
比如现在有一个用户类,用户类是负责用户的查询、修改等关于用户的操作的。现在又新增一个订单服务,你
完全可以把订单业务也扩展到用户类中实现。此时用户类就对外提供用户服务和订单服务,违背了单一职
责类原则。合理的解决办法是新创建一个订单类,每个类只负责一个业务职责。
2.里氏替换原则:子类可在扩展自身的功能,尽量不要去重写父类原有的功能。
3.依赖倒置原则:面向接口编程
4.接口隔离原则:接口设计粒度尽量细粒化。
不要一个接口既对外提供用户服务同时也对外提供订单服务,保证每个接口最小功能单元。
5.迪米特法则:降低代码耦合(局部变量耦合)
不要在一个方法中,直接定义对象的引用new对象(A a = new A),将对象的引用定义到全局变量中
,在需要的地方通过new构建。
6.开闭原则:不要在已完成的业务类中,新增其他无关这业务类的服务,可以重新创建类,完成新增业务服务
2、抽象工厂模式
1.抽象工厂模式
凡是出现了大量的对象需要创建,并且对象具有共同的接口时,可以通过工厂方法模式进行创建。
原则:
1、解耦,把对象的创建和使用的过程分开。
2、工厂负责对象的创建,黑盒创建。
3、面向接口编程,使用者只管使用,只知接口不知道具体实现类。
实现方式:
创建一个工厂接口,创建返回不同对象的工厂接口实现类。
1.定义蔬菜抽象类
package org.example.vegetables;
/**
* 定义一个蔬菜抽象类
*/
public abstract class Vegetables {
public abstract void show();
}
2.定义黄瓜特定对象类
package org.example.vegetables;
public class Cuke extends Vegetables{
@Override
public void show() {
System.out.println("我是黄瓜");
}
}
3.定义南瓜特定对象类
package org.example.vegetables;
public class Pumpkin extends Vegetables{
@Override
public void show() {
System.out.println("我是南瓜");
}
}
1.定义蔬菜工厂接口
package org.example.vegetables.service;
import org.example.vegetables.Vegetables;
/**
* 蔬菜工厂接口
*/
public interface VegetablesFactory {
public Vegetables getVegetables();
}
2.定义黄瓜工厂实现类
package org.example.vegetables.service.imp;
import org.example.vegetables.Cuke;
import org.example.vegetables.Vegetables;
import org.example.vegetables.service.VegetablesFactory;
/**
* 黄瓜工厂实现类
*/
public class CukeVegetablesFactory implements VegetablesFactory {
@Override
public Vegetables getVegetables() {
return new Cuke();
}
}
3.定义南瓜工厂实现类
package org.example.vegetables.service.imp;
import org.example.vegetables.Pumpkin;
import org.example.vegetables.Vegetables;
import org.example.vegetables.service.VegetablesFactory;
/**
* 南瓜工厂实现类
*/
public class PumpkinVegetablesFactory implements VegetablesFactory {
@Override
public Vegetables getVegetables() {
return new Pumpkin();
}
}
package org.example.vegetables.service;
import org.example.vegetables.Vegetables;
import org.example.vegetables.service.imp.CukeVegetablesFactory;
import org.junit.Test;
public class VegetablesRun {
private VegetablesFactory vegetablesFactory;
@Test
public void onVegetablesFactoryShow(){
//根据黄瓜工厂子类 获取黄瓜对象
vegetablesFactory = new CukeVegetablesFactory();
Vegetables vegetables = vegetablesFactory.getVegetables();
vegetables.show();
}
}
3、单例
饿汉式
public class HungryDemo {
private HungryDemo(){}
private static HungryDemo hungryDemo = new HungryDemo();
public static HungryDemo getInstance(){
return hungryDemo;
}
}
懒汉式--线程安全
public class LazyDemo {
private LazyDemo(){}
private static volatile LazyDemo lazyDemo = null;
public static LazyDemo getInstance(){
if(lazyDemo == null){
synchronized (LazyDemo.class){
if(null == lazyDemo){
lazyDemo = new LazyDemo();
}
}
}
return lazyDemo;
}
public static void main(String[] args) {
while (true){
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(LazyDemo.getInstance());
}
}).start();
}
}
}
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。